package cn.vetech.sync.elasticsearch.service;

import java.util.Map;
import java.util.concurrent.ExecutionException;

/**
 * @author 陈青松
 * @version 1.0
 * @since 2017-08-26 16:19:00
 */
public interface ElasticsearchService {
    /**
     * 新增es数据
     *
     * @param index   String index
     * @param type    String type
     * @param id      String id
     * @param dataMap Map<String, Object> 数据
     */
    void insertById(String index, String type, String id, Map<String, Object> dataMap);

    /**
     * 批量新增es数据
     *
     * @param index     String index
     * @param type      String type
     * @param idDataMap Map<String, Object> 数据
     */
    void batchInsertById(String index, String type, Map<String, Map<String, Object>> idDataMap);

    /**
     * 删除es数据
     *
     * @param index   String index
     * @param type    String type
     * @param id      String id
     * @param dataMap Map<String, Object> 数据
     */
    void update(String index, String type, String id, Map<String, Object> dataMap);

    /**
     * 删除es数据
     *
     * @param index String index
     * @param type  String type
     * @param id    String id
     */
    void deleteById(String index, String type, String id);

    /**
     * 查询索引数量
     *
     * @param index String index
     * @param type  String type
     * @return Long 数量
     */
    long count(String index, String type) throws ExecutionException, InterruptedException, Exception;

    /**
     * 判断是否存在某个索引
     *
     * @param index String index
     * @return boolean 是否存在
     */
    boolean indexExists(String index);

    /**
     * 创建索引
     *
     * @param index           String index
     * @param type            String type
     */
    void createIndex(String index, String type);

    /**
     * 删除es索引数据
     * @param index String
     * @param type String
     */
    Boolean deleteIndex(String index, String type);
}
